/////////////////////////////////////////////////////////////////////////////////////
// Header Protection
#ifndef _SCENE_H_
#define _SCENE_H_

/////////////////////////////////////////////////////////////////////////////////////
// Forward Declarations

class ABCObject;

/////////////////////////////////////////////////////////////////////////////////////
// This class contains all game objects and performs scene management.
class CScene : public ISingleton<CScene>, public ABCProcess
{
public:     // methods

	// Called to start up the scene management system.
	void Initialize();

	// Called to shut down the scene management system.
	void Shutdown();

	void AddObject( ABCObject *_pObject );

private:    // ABCSingleton<CScene> methods
	friend class ISingleton<CScene>;

	CScene() : m_lstObjects() { }
	~CScene() { }

private:    // methods

	// Called when the process is started
	void ProcessBegin();

	// Called when the process is stopped
	void ProcessEnd();

	// Called at the frame rate with which the process was started.
	// _fTime: float_t - the seconds that have passed since the last tick
	void ProcessTick( float_t _fTime );

private:    // dummy definitions
	CScene( CScene const & );
	CScene &operator =( CScene const & );

private:    // data
	mutex_t              m_Mutex;
	flist_t<ABCObject *> m_lstObjects;
};

/////////////////////////////////////////////////////////////////////////////////////
// Header Protection
#endif // _SCENE_H_
